import numpy as np

# Normalize 变换
class Normalize:
    def __init__(self, mean=0, std=1):
        """
        使用均值和标准差对 NumPy 数组进行归一化的变换。

        Args:
            mean (float or sequence): 所有值的均值或每个通道的均值序列。
            std (float or sequence): 所有值的标准差或每个通道的标准差序列。
        """
        self.mean = mean
        self.std = std

    def __call__(self, array):
        """
        执行 Normalize 变换操作。

        Args:
            array (numpy.ndarray): 待变换的 NumPy 数组。

        Returns:
            numpy.ndarray: 归一化后的数组。
        """
        mean, std = self.mean, self.std

        if not np.isscalar(mean):
            mshape = [1] * array.ndim
            mshape[0] = len(array) if len(self.mean) == 1 else len(self.mean)
            mean = np.array(self.mean, dtype=array.dtype).reshape(*mshape)

        if not np.isscalar(std):
            rshape = [1] * array.ndim
            rshape[0] = len(array) if len(self.std) == 1 else len(self.std)
            std = np.array(self.std, dtype=array.dtype).reshape(*rshape)

        return (array - mean) / std
